package com.net.server;

import com.alibaba.fastjson.JSON;
import com.pojo.ClientRunTimeInfo;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import java.net.InetAddress;

/**
 * @ClassName NettyServerHandler
 * @Description TODO
 * @Author zhuchen216628
 * @Date 2018/9/28 10:51
 * @Version 1.0
 **/
@Component
@Scope("prototype")
public class NettyAppServerHandler extends SimpleChannelInboundHandler<String> {

    @Autowired
    private ConnectManager connectManager;

    public NettyAppServerHandler(){
    }

    @Override
    protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
        // 收到消息直接打印输出
        System.out.println(ctx.channel().remoteAddress() + " Say : " + msg);

        // 返回客户端消息 - 我已经接收到了你的消息
//        ctx.writeAndFlush("Received your message !\n");
    }

    /*
     *
     * 覆盖 channelActive 方法 在channel被启用的时候触发 (在建立连接的时候)
     *
     * channelActive 和 channelInActive 在后面的内容中讲述，这里先不做详细的描述
     * */
    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {
        super.channelActive(ctx);
        connectManager.getClientConnectorMap().put(ctx.channel(),ctx.channel());
        System.out.println("client连上了 : " + ctx.channel().remoteAddress() + " !");
    }

    @Override
    public void channelInactive(ChannelHandlerContext ctx) throws Exception {
        super.channelInactive(ctx);
        connectManager.getClientConnectorMap().remove(ctx.channel());
        System.out.println("client断开了 ：" + ctx.channel());
    }
}
